メインコンテンツへスキップ
  1. ブログ投稿/

統計 - 対応のあるt検定

この投稿は、統計学で使用される対応のあるt検定について説明するために書かれました。

今回もPythonライブラリScipyを利用して対応のあるt検定を行います。

対応のあるt検定 #

対応のあるt検定は、2つの関連するグループ間の平均を比較する統計的技術です。この方法は、通常、同一の被験者グループに対して2つの測定値がある場合に適用されます。対応のあるt検定は、2つの関連するグループ間の平均の差が統計的に有意かどうかを判断するために使用されます。

1. 仮説設定 #

H₀ : 𝜇D  = 0 → 帰無仮説 (𝜇𝐷 = 𝜇₁ - 𝜇₂) 実験前後の平均の差は0です。
H₁ : 𝜇D  ≠ 0 → 対立仮説 実験前後の平均の差は0ではありません。

2. 正規性検定 #

2つのグループのサンプル数が30未満の場合、正規性検定を行う必要があります。

2つのグループのサンプル数が30以上の場合、中心極限定理により正規性が満たされたと仮定します。

  • Scipyでの正規性検定はShapiro-Wilk検定を通じて確認可能です。

4. 対応のあるt検定統計量の計算 #

2つのグループの平均と標準偏差を使用して、対応のあるt検定統計量を計算します。

5. 決定/結論 #

計算されたT統計量が臨界値を超えた場合、帰無仮説を棄却し、対立仮説を採用します。

そうでない場合、帰無仮説を棄却しません。

統計的に有意な差がある場合、2つのグループ間に平均の差が存在すると結論付けます。

PythonライブラリScipyの利用方法 #

以下はPythonのScipyライブラリを利用して対応のあるt検定を行う方法です。

今回扱うデータには、Aのクラスでは筋トレが集中力を向上させるという話があり、Aが実際に筋トレを始める前と後で比較することにしました。Aは20人に筋トレを行わせた後、トレーニング前と後で集中力測定テストを受けさせた結果です。

筋トレ前後で集中力に有意な差があるかどうかを対応のあるt検定を通じて調べたいと思います。

仮説は以下の通りです。

帰無仮説 : 筋トレ前後のテスト平均は同じです。

対立仮説 :  筋トレ前後のテスト平均は同じではありません。

有意水準は0.05に設定します。

まずはデータを読み込みましょう。

>>> import pandas as pd
>>> from scipy import stats
>>> df = pd.read_csv("./data/ch11_training_rel.csv")
>>> df.head()
0 59 41
1 52 63
2 55 68
3 61 59
4 59 84

次に、正規性検定を行いましょう。

>>> a = stats.shapiro(df['前'])
>>> b = stats.shapiro(df['後'])
>>> print(a, b)
ShapiroResult(statistic=0.9670045375823975, pvalue=0.690794825553894) 
ShapiroResult(statistic=0.9786625504493713, pvalue=0.9156817197799683)

結果はどちらもp値が0.05より大きく、正規性が満たされています。

次に、Scipyライブラリ内のttest_relを使ってt統計量とp値を求めます。

>>> t_score, p_value = stats.ttest_rel(df['前'], df['後'])
>>> print(round(t_score, 4), round(p_value, 2))
-2.2042 0.04

p値が有意水準0.05より小さいため、帰無仮説(筋トレ前後の平均が同じである)が棄却されました。したがって、筋トレ前後の平均スコアには有意な差があると言えます。